package com.springboot.learn_web_rabbitmq.demo;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 从rabbitmq服务器获取到消息
 */
public class Customer {
    private final static String QUEUE_NAME="rabbitMQ.test";
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接工厂
        ConnectionFactory factory=new ConnectionFactory();
        //设置RabbitMQ地址
        factory.setHost("127.0.0.1");
        //创建一个连接
        Connection connection=factory.newConnection();
        //创建一个通道
        Channel channel=connection.createChannel();
        //声明要关注的队列
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        //DefaultConsumer类实现了Consumer接口，通过传入一个频道
        //告诉服务器我们需要哪个频道的消息，如果频道中有消息，就会执行回调函数handleDelivery
        Consumer consumer=new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String message=new String(body,"UTF-8");
                System.out.println("Customer Received '" + message +"'");
            }
        };
        //自动回复队列应答  --  Rabbitmq中的消息确认机制
        channel.basicConsume(QUEUE_NAME,true,consumer);
    }
}
